package com.example.demo.Controller;

import com.example.demo.model.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.jws.soap.SOAPBinding;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: H_tao_X
 * Date: 2022-12-02
 * Time: 19:13
 */
@Slf4j
@ResponseBody // 返回非静态页面
@Controller
@RequestMapping("/u") // 一级路由
public class UserController4 {

    // 1. 实现用户和服务器的映射
        // 通过 输入的 URL 匹配 服务器的方法

    /**
     * @RequestMapping()
     * @RequestMapping()
     * 特征 1. 既支持 Post 请求 也 支持 Get 请求 2.可以修饰类（选择）和方法
     */
    @RequestMapping("/sayhi1")
    public String sayHi1() {
        return "hhh";
    }


    /**
     * 指定请求 Post
     */
    @GetMapping("/sayhi2")
    public String sayHi2() {
        return "哈哈哈！";
    }

    @RequestMapping(method = RequestMethod.GET,value = "/sayhi3")
    public String sayHi3() {
        return "这是一种扩展";
    }


    // 2. 服务器端获取参数
        // 首先需要个 user 实体类
            // 里面存放我们所需要的对象

    /**
     * 1. 获取单个参数
     * 通过 id 获取到 user 信息，返回的是 user 对象
     */
    @RequestMapping("/getuserbyid")
    public User getUserById(Integer id) {
        // 设置属性
        User user = new User();
        user.setAge(id == null ? 0 : id);
        user.setUsername("张三");
        user.setPassword("123");
        user.setAge(22);
        return user;
    }

    /**
     * 2.获取多参数
     */

    @RequestMapping("/log")
    public String log(String username,String password) {
        return "username: " + username
                + "password: " + password;
    }

    /**
     * 3.获取对象
     */
    @RequestMapping("/reg")
    public String reg(@RequestBody User user) {
        return "用户信息: " + user;
    }

    /**
     * 4.后端参数重命名 @RequestParam
     * 不加这个注解，我们就必须前后端传参数名称保持一致
     * 如果要修改的话，就必须加参数 @RequestParam（“重命名的名称（前端的名称）"）
     * @RequestParam("里面放前端传递参数名称") 后面接受的就是我们自己取得名称
     * 有个问题如果我们这样写了，但是这个参数不传递的话，会报错，我们需要在后面加上 required = false
     */
    @RequestMapping("/log2")
    public String log2(@RequestParam(value = "user",required = false) String username,String password) {
        return "username: " + username +
                "password:" + password;
    }

    /**
     * 5.使用Postman模拟发送 Json 数据
     */

    // 在 reg 方法的基础上 加上 @RequestBody 注解，才能 让 服务器接收到 Json 格式的数据

    @RequestMapping("/reg2")
    public String reg2(@RequestBody User user) {
        return "用户信息: " +  user;
    }

    /**
     * 6.获取 URL地址中的参数
     * 使用 @PathVariable
     */

    // URL：http（s）://xxx？yyy  ---》 xxx 为 url地址 yyy 为参数
        // 获取 URL地址中的参数就是获取 xxx中的 内容
    // 比如：localhost：8080/u/hero/66/影魔
    @RequestMapping("/hero/{id}/{name}") // hero 为 url ，id 和 name 为 url中的参数
    public String getHeroInfo(@PathVariable  Integer id,
                              @PathVariable String name) {
        return "ID: " + id + "| Name: " + name;
    }

    // 小练习


    @RequestMapping("hero/{id}/{name}/{jc}")
    public String getInfo(@PathVariable Integer id,@PathVariable String name,
                          @PathVariable String jc) {
        return "ID 是:" + id + "| Name: " + "技能: |" + jc;
    }


//    /**
//     * 7. 使用 Postman 模拟上传文件
//     */
//    @RequestMapping("/upimg")
//    public boolean upImg() {
//
//    }






}
